//******************************************************************处理时间日期的函数***********************************************************//
/**
 *将毫秒值格式化为的函数
 *@param dateStr 日期字符串(格式为:yyyy-MM-dd或yyyy-MM-dd HH:mm:ss)
 *@param timeStr 时间字符串,此参数不填写则不进行日期字符串的拼接(格式为:HH:mm:ss)
 *@return 返回转换成功的毫秒值
 */
function formatDateTime(number) {
    //获取日期字符串(调用本js中的函数)
    let date = formatDate(number);

    //获取时间字符串(调用本js中的函数)
    let time = formartTime(number);

    //返回结果数据
    return date + " " + time;
}

/**
 *将毫秒值格式化为的日期函数
 *@param number 日期时间字毫秒值
 *@return 返回格式化的时间字符串,格式(yyyy-MM-dd)
 */
function formatDate(number) {
    //获取时间对象
    let date = new Date(number);

    //获取相关日期(按顺序放在数组里)
    let dateArr = [date.getFullYear(), date.getMonth() + 1, date.getDate()];

    //循环补零(小于10的前面补零)
    for (let i = 0; i < dateArr.length; i++) {
        if (i > 0 && dateArr[i] < 10) {
            dateArr[i] = "0" + dateArr[i];
        }
    }

    //返回结果数据
    return dateArr.join("-");
}

/**
 *将毫秒值格式化为的时间函数【新增】
 *@param number 日期时间毫秒值
 *@return 返回格式化的时间字符串,格式(HH:mm:ss)
 */
function formartTime(number) {
    //获取时间对象
    let date = new Date(number);

    //获取相关时间(按顺序放在数组中)
    let timeArr = [date.getHours(), date.getMinutes(), date.getSeconds()];

    //循环补零(小于10的前面补零)
    for (let i = 0; i < timeArr.length; i++) {
        if (timeArr[i] < 10) {
            timeArr[i] = "0" + "" + timeArr[i];
        }
    }

    //返回结果数据
    return timeArr.join(":");
}

/**
 *将时间字符串转换为毫秒值的函数
 *@param dateStr 日期字符串(格式为:yyyy-MM-dd或yyyy-MM-dd HH:mm:ss)
 *@param timeStr 时间字符串,此参数不填写则不进行日期字符串的拼接(格式为:HH:mm:ss)
 *@return 返回转换成功的毫秒值
 */
function dateToTamp(dateStr, timeStr) {
    //如果日期函数为空
    if (!dateStr) return null;

    //如果传入了时间字符串
    if (timeStr) dateStr += " " + timeStr;

    //进行日期转换
    dateStr = dateStr.replace(/-/g, '/');

    //返回转换数据
    return new Date(dateStr).getTime();
}

/* ***********************************************************中国标准时间转换时间戳****************************** */

function timeStamp(val) {
    return new Date(val).getTime()
}


//******************************************************************处理倒计时的函数***********************************************************//
/**
 *格式化倒计时秒数的方法
 *@param value 倒计时剩余时间(单位：秒)
 *@return 返回转换成功的倒计时时间(转换格式:XXXX天XX小时XX分XX秒)
 */
function formatSeconds(value) {
    //格式化传入时间(格式化为整形)
    let seconds = parseInt(value);

    //如果秒数小于等于0,直接返回空字符串
    if (seconds < 0) return "";

    //定义初始化分钟,小时,天数据
    let minut, hours, days = 0;

    //如果秒数大于60秒(计算出总共多少分钟,秒数修改为除去分钟后余下的秒数)
    if (seconds > 60) {
        minut = parseInt(seconds / 60);
        seconds = parseInt(seconds % 60);
    }

    //如果分钟大于60分(计算出总共多少小时,分钟数修改为除去小时余下的分钟数)
    if (minut > 60) {
        hours = parseInt(minut / 60);
        minut = parseInt(minut % 60);
    }

    //如果小时大于60小时(计算出总共多少天,小时数修改为除去天数余下的小时数)
    if (hours > 24) {
        days = parseInt(hours / 24);
        hours = parseInt(hours % 24);
    }

    //定义循环对象
    let data = {
        "天": days,
        "小时": hours,
        "分": minut,
        "秒": seconds
    };

    //定义结果对象
    let result = [""];

    //循环生成结果
    for (let unit in data) {
        if (data[unit] > 0) {
            result.push(data[unit]);
            result.push(unit);
        }
    }

    //返回结果数据
    return result.join("");
}

/**
 *开启单纯天分钟和秒倒计时(商品)
 *@param time 倒计时剩余时间(单位：秒)
 *@param that 页面对象
 *@param goodsId 商品主键
 *@return 返回转换成功的毫秒值
 */
function resetTime(time, that, goodsId) {
    //是否继续执行
    var isContineu = true;

    //剩余时间添加初始值
    time = time ? time : 0;

    //获取原有的定时器
    var clearTime = that.data.clearTime

    //关闭原有的定时器
    if (clearTime) clearInterval(clearTime);

    //执行window定时器，1秒一次
    clearTime = setInterval(function() {
        //如果需要继续执行
        if (isContineu) {
            //如果剩余时间小于等于0(修改继续属性)
            if (time <= 0) {
                isContineu = false;
                if (time == 0) {
                    that.setData({
                        d: "00",
                        h: "00",
                        m: "00",
                        s: "00"
                    });
                    if (goodsId) {
                        that.productDetails(goodsId) //商品详情重新渲染页面          
                        that.getRelatedProducts(goodsId) // 商品详情获取相关产品
                    }
                }
            }

            //如果时间大于0
            else {
                //计算天小时分钟和秒数
                let d = Math.floor(time / (60 * 60 * 24));
                let h = Math.floor(time % (60 * 60 * 24) / 3600);
                let m = Math.floor(time % (60 * 60 * 24) % 3600 / 60);
                let s = Math.floor(time % (60 * 60 * 24) % 3600 % 60);

                //数值补0
                d = d < 10 ? "0" + d : d + "";
                h = h < 10 ? "0" + h : h + "";
                m = m < 10 ? "0" + m : m + "";
                s = s < 10 ? "0" + s : s + "";

                //修改页面数据值
                that.setData({
                    d: d,
                    h: Number(h) + Number(d) * 24,
                    m: m,
                    s: s
                })

                // // 注释2020-01-07console.log(d+":"+h + ":" + m + ":" + s);
                //减去原始值
                time -= 1;
            }
        }
    }, 1000);

    //添加定时器变量
    that.setData({
        clearTime: clearTime
    });
}

//
/**
 *订单详情单纯分钟和秒倒计时(订单)
 *@param time 倒计时剩余时间(单位:秒)
 *@param that 页面对象
 *@return 返回转换成功的毫秒值
 */
function timeout(time, that) {
    //是否继续执行
    var isContineu = true;

    //剩余时间添加初始值
    time = time ? time : 0;

    //获取原有的定时器
    var clearPayTime = that.data.clearPayTime

    //关闭原有的定时器
    if (clearPayTime) clearInterval(clearPayTime);

    //执行window定时器，1秒一次
    clearPayTime = setInterval(function() {
        if (isContineu) {
            //如果剩余时间小于0(修改继续属性)
            if (time <= 0) {
                isContineu = false;
                if (time == 0) {
                    that.setData({
                        h: "00",
                        m: "00",
                        s: "00",
                        hideBtn: true
                    })
                }
            }

            //如果时间大于等于0
            else {
                //计算时分秒
                let h = Math.floor((Math.floor(time / 60) / 60));
                let m = Math.floor((time - h * 60 * 60) / 60);
                let s = Math.floor((time - h * 60 * 60 - m * 60));

                //数值补0
                h = h < 10 ? "0" + h : h + "";
                m = m < 10 ? "0" + m : m + "";
                s = s < 10 ? "0" + s : s + "";

                //修改数值
                that.setData({
                    h: h,
                    m: m,
                    s: s,
                    hideBtn: false
                })

                // // 注释2020-01-07console.log(h + ":" + m + ":" + s);
                //减去原始值
                time -= 1;
            }
        }
    }, 1000);

    //添加定时器变量
    that.setData({
        clearPayTime: clearPayTime
    })
}

//******************************************************************声明模型导出函数***********************************************************//
module.exports = { formatDateTime, formatDate, formartTime, dateToTamp, formatSeconds, resetTime, timeout, timeStamp }